package com.cy.pj.arithmetic.controller;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ArithmeticController extends BaseController{
    //除法运算
    @RequestMapping("/doDivCompute01/{n1}/{n2}")
    public String doDivCompute01(@PathVariable Integer n1, @PathVariable Integer n2) {
        try {
            Integer result = n1 / n2;
            return "result is=" + result;
        } catch (ArithmeticException e) {
            return "计算失败,原因+" + e.getMessage();
        }//try{}catch代码我们在项目中通常会认为模板代码
        //在项目中不建议出现大量重复的模板代码
    }

    @RequestMapping("/doDivCompute02/{n1}/{n2}")
    public String doDivCompute02(@PathVariable Integer n1, @PathVariable Integer n2) {
        Integer result = n1 / n2;
        //如上语句出现了算数异常之后,此异常会抛给谁?(调用方)
        //调用方是谁?DispathcherServlet
        return "result is=" + result;
    }

    /**
     * @ExceptionHandler 注解描述的方法为控制逻辑层异常处理方法,此注解内部定义的异常类型,
     * 为异常处理方法可以处理的异常类型
     * 其中,异常处理方法参数中的异常类型应该与@ExceptionHandler注解中定义的异常类型
     * 一致或者是@ExceptionHandler注解中定义的异常类型的父类类型
     *
     * @Param e 为异常处理方法捕获的异常对象
     * @return
     */
//    @ExceptionHandler(ArithmeticException.class)
//    public String doHandleArithmeticException(ArithmeticException e){//可以写父类类型
//
//        return "exception msg is="+e.getMessage();
//    }//此异常处理方法,可以处理这个方法所在类的所有算数异常
}
